#include "virtio_disk.h"

#include "fs.h"

#include "impl/virtio_disk_impl.h"
#include "defs.h"


//for disk config & limit parameters
#define DISK_CAPACITY      (2000*2*512)
#define DISK_FILE_NAME    "virtio.file.img"


#define max_sector_no   ((DISK_CAPACITY)/512)


virtio_disk_impl_t * vdisk;

void virtio_init(void) {
  vdisk = virtio_disk_impl_create(DISK_FILE_NAME, DISK_CAPACITY);
#ifdef DEBUG
  virtio_disk_impl_print(vdisk);
#endif
}
void virtio_destroy(void){
  virtio_disk_impl_destroy(vdisk);
  vdisk = 0;
}

void virtio_disk_rw(struct buf * b, int write){
  int sector = b->blockno * (BSIZE / 512);
  if(sector < max_sector_no){
      b->disk = 1;
      virtio_disk_impl_seek(vdisk, sector * 512);
      virtio_disk_impl_rw(vdisk, b->data, BSIZE, write);
      b->disk = 0;
  }
  else{
    panic("virtio_disk_rw for overflow max_sector_no");
  }
}

void virtio_disk_zero__(){
  virtio_disk_impl_zero(vdisk);
}
